package com.oyjd.fw.util;

/**
 * 字节操作工具函数
 * 
 */
public class ByteUtil {
	/**
	 * 可显示的16位字符串转换为指令
	 * 
	 * @param s
	 * @return
	 */
	public static byte[] strToByte(String s) {
		String[] ss = s.split(" ");
		byte[] b = new byte[ss.length];
		for (int i = 0; i < ss.length; i++) {
			b[i] = (byte) Integer.parseInt(ss[i], 16);
		}
		return b;
	}

	/**
	 * 指令转换为可显示的16位字符串
	 * 
	 * @param b
	 * @return
	 */
	public static String byteToStr(byte[] b) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < b.length; i++) {
			if (0 != i) {
				sb.append(" ");
			}
			sb.append(fillZero(Integer.toHexString(b[i] & 0xFF), 2));
		}
		return sb.toString().toUpperCase();
	}

	/**
	 * BCD俩字符转换为指令
	 * 
	 * @param b
	 * @return
	 */
	public static byte[] bcd2ToByte(String s) {
		byte[] b = new byte[s.length() / 2];
		for (int i = 0; i < s.length() / 2; i++) {
			int pos = i * 2;
			String ts = s.substring(pos, pos + 2);
			b[i] = (byte) Integer.parseInt(ts, 16);
		}
		return b;
	}

	/**
	 * 指令转换为可显示的BCD俩字符串
	 * 
	 * @param b
	 * @return
	 */
	public static String byteToBcd2(byte[] b) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < b.length; i++) {
			sb.append(byteToBcd2(b[i]));
		}
		return sb.toString();
	}

	/**
	 * 指令转换为可显示的BCD字符串
	 * 
	 * @param b
	 * @return
	 */
	public static String byteToBcd2(byte b) {
		StringBuffer sb = new StringBuffer();
		sb.append((b & 0xF0) >>> 4);
		sb.append(b & 0xF);
		return sb.toString().toUpperCase();
	}

	/**
	 * A.7 数据格式07
	 * 
	 * @param b
	 * @return
	 */
	public static String fomat07(byte[] b) {
		String d1 = ByteUtil.byteToBcd2(b[0]);
		String d2 = ByteUtil.byteToBcd2(b[1]);
		return d2 + d1.substring(0, 1) + "." + d1.substring(1);
	}

	/**
	 * A.9 数据格式09
	 * 
	 * @param b
	 * @return
	 */
	public static String fomat09(byte[] b) {
		String d1 = ByteUtil.byteToBcd2(b[0]);
		String d2 = ByteUtil.byteToBcd2(b[1]);
		String d31 = Integer.toHexString(b[2] & 0xF);
		String d32 = Integer.toHexString(b[2] & 0x70);
		return d32 + d31 + "." + d2 + d1;
	}

	/**
	 * A.11 数据格式11
	 * 
	 * @param b
	 * @return
	 */
	public static String fomat11(byte[] b) {
		String d1 = ByteUtil.byteToBcd2(b[0]);
		String d2 = ByteUtil.byteToBcd2(b[1]);
		String d3 = ByteUtil.byteToBcd2(b[2]);
		String d4 = ByteUtil.byteToBcd2(b[3]);
		return d4 + d3 + d2 + "." + d1;
	}

	/**
	 * 前置补零
	 * 
	 * @param s
	 * @param n
	 * @return
	 */
	public static String fillZero(String s, int n) {
		int size = s.length();
		for (int i = 0; i < n - size; i++) {
			s = "0" + s;
		}
		return s;
	}
}
